Kodova stranka

Otázka od: Rumcajs - konference

17. 10. 2002 13:49

Servus ve spolek, resim tenhle problem:
Mam TMemo ve ktere skladam text. Krom toho textu tam mam i nektere dekadicke
znaky (#14, #22 atd). Ted potrbuju vysledny text (pouze text) prevest do
kodovaci stranky 852.
Jak na to?
Respektive, jde nějak nastavit, aby se v tom TMemo rovnou psalo v 852?
Rumcajs


---
Odchozí zpráva neobsahuje viry.
Zkontrolováno antivirovým systémem AVG (http://www.grisoft.cz).
Verze: 6.0.401 / Virová báze: 226 - datum vydání: 9.10.2002

Odpovedá: ing. Jan Fiala

17. 10. 2002 14:08

17.10.2002 Rumcajs - konference:
> Servus ve spolek, resim tenhle problem:
> Mam TMemo ve ktere skladam text. Krom toho textu tam mam i nektere dekadicke
> znaky (#14, #22 atd). Ted potrbuju vysledny text (pouze text) prevest do
> kodovaci stranky 852.
> Jak na to?
> Respektive, jde nějak nastavit, aby se v tom TMemo rovnou psalo v 852?

Nastavit to nejde. Proste ve Windows pises v CP1250, popr. jine ANSI.
S tim souvisi problem, ze ANSI neobsahuje vsechny znaky, ktere
obsahuje 852 a naopak (viz ramecky).
Prevod je moznoy pomoci funkci OEMtoANSI a ANSItoOEM, ale bydes se
pred tim muset zbavit tech mrizi a prevest to na znaky. Ale to udelej
az po prevodu do 852.

--
ing. Jan Fiala
mailto:jan.fiala@iol.cz

Odpovedá: Ludek ZITA

17. 10. 2002 16:54


----- Original Message -----
From: "Rumcajs - konference" <konrum@seznam.cz>

> Servus ve spolek, resim tenhle problem:
> Mam TMemo ve ktere skladam text. Krom toho textu tam mam i nektere
dekadicke
> znaky (#14, #22 atd). Ted potrbuju vysledny text (pouze text) prevest do
> kodovaci stranky 852.
> Jak na to?
> Respektive, jde nějak nastavit, aby se v tom TMemo rovnou psalo v 852?

Ahoj.

  with Memo1 do
  begin
    Font.Charset := OEM_CHARSET;
    Font.Color := clWindowText;
    Font.Name := 'Terminal';
    OEMConvert := TRUE;
  end;


Ludek

Odpovedá: Rumcajs - konference

18. 10. 2002 8:27

Vsechno spatne ... Text se mi sice zobrazi v 852, ale jenom diky tomu fontu.
Kdyz to odeslu do ciloveho zarizeni (tiskarna EPSON), tak se mi tiskne porad
ANSI - tedy same nesmysly. Potrebuju, aby to slo napsat cesky a pak cely
obsha toho TMema prevest do 852 a pak odeslat ....
Rumcajs 18.10.2002; 8:16
> Ahoj.
>
> with Memo1 do
> begin
> Font.Charset := OEM_CHARSET;
> Font.Color := clWindowText;
> Font.Name := 'Terminal';
> OEMConvert := TRUE;
> end;
>
>
> Ludek



---
Odchozí zpráva neobsahuje viry.
Zkontrolováno antivirovým systémem AVG (http://www.grisoft.cz).
Verze: 6.0.401 / Virová báze: 226 - datum vydání: 9.10.2002

Odpovedá: Lukas Gebauer

18. 10. 2002 11:28

A co to treba proste vzit, prekodovat a pak poslat na tiskarnu?

Funkce na prekodovani stringu mas treba v me Synapsi (unita
SynaChar). Muzes to tim prekodovat do ceho se ti to zlibi, nejen do
CP852, ale trebas i do Kameniku, do ISO-latinu2, do unicodu.. Ba
dokonce budes-li chtit, muzes jednoduse odstranit diakritiku.  

> Vsechno spatne ... Text se mi sice zobrazi v 852, ale jenom diky tomu
> fontu. Kdyz to odeslu do ciloveho zarizeni (tiskarna EPSON), tak se mi
> tiskne porad ANSI - tedy same nesmysly. Potrebuju, aby to slo napsat
> cesky a pak cely obsha toho TMema prevest do 852 a pak odeslat ....


-- Lukas Gebauer.

E-mail: gebauerl@mlp.cz
http://www.ararat.cz/synapse/ - Synapse Delphi and Kylix TCP/IP Lib.

Odpovedá: Peter Vlkovic

18. 10. 2002 10:31

Ahoj,

ku konverzii mozes pouzit napriklad aj nizsie
uvedenu jednoucelovu funkciu.

Vlkovic


function cp852to1250 ( S: string ): string;
var
  i: integer;
  p: integer;
  Ch: char;
const
  Cp852 =
#$A0#$61#$61#$61#$84#$63#$63#$87#$83#$64#$65#$82#$88#$65#$A1#$69+
#$8D#$8C#$6C#$6E#$A4#$94#$A2#$94#$93#$AA#$A9#$73#$73#$A8#$9F#$74+
#$81#$A3#$96#$81#$98#$7A#$7A#$91#$8F#$41#$41#$41#$8E#$43#$43#$80+
#$85#$44#$45#$90#$89#$45#$8B#$49#$8A#$9C#$4C#$4E#$A5#$99#$95#$99+
#$A7#$AB#$9E#$53#$53#$9B#$86#$54#$9A#$97#$A6#$9A#$9D#$5A#$5A#$92;
  Cp1250 =
#$E1#$E2#$E3#$B9#$E4#$E6#$E7#$E8#$EF#$F0#$EB#$E9#$EC#$EA#$ED#$EE+
#$E5#$BE#$B3#$F1#$F2#$F6#$F3#$F5#$F4#$E0#$F8#$9C#$BA#$9A#$9D#$FE+
#$FC#$FA#$F9#$FB#$FD#$BF#$9F#$9E#$C1#$C2#$C3#$A5#$C4#$C6#$C7#$C8+
#$CF#$D0#$CB#$C9#$CC#$CA#$CD#$CE#$C5#$BC#$A3#$D1#$D2#$D6#$D3#$D5+
#$D4#$C0#$D8#$8C#$AA#$8A#$8D#$DE#$DC#$DA#$D9#$DB#$DD#$AF#$8F#$8E;
begin
  for i := 1 to Length ( S ) do
      begin
      Ch := S[i];
      if Ch > #127 then
         begin
         p := PosChar ( Ch, Cp852 );
         if p > 0 then
            begin
            S[i] := Cp1250[p];
            end;
         end;
      end;
  Result := S;
end;


> Vsechno spatne ... Text se mi sice zobrazi v 852, ale jenom diky tomu fontu.
> Potrebuju ...cely obsah toho TMema prevest do 852 a pak odeslat ....
> Rumcajs

Odpovedá: ing. Jan Fiala

18. 10. 2002 11:06

A proc, kdyz v systemu existuji primo finkce OemToChar a CharToOem ?

--
ing. Jan Fiala
mailto:jan.fiala@iol.cz

18.10.2002 Peter Vlkovic:
> ku konverzii mozes pouzit napriklad aj nizsie
> uvedenu jednoucelovu funkciu.


> function cp852to1250 ( S: string ): string;
> var
> i: integer;
> p: integer;
> Ch: char;
> const
> Cp852 =
> #$A0#$61#$61#$61#$84#$63#$63#$87#$83#$64#$65#$82#$88#$65#$A1#$69+
> #$8D#$8C#$6C#$6E#$A4#$94#$A2#$94#$93#$AA#$A9#$73#$73#$A8#$9F#$74+
> #$81#$A3#$96#$81#$98#$7A#$7A#$91#$8F#$41#$41#$41#$8E#$43#$43#$80+
> #$85#$44#$45#$90#$89#$45#$8B#$49#$8A#$9C#$4C#$4E#$A5#$99#$95#$99+
> #$A7#$AB#$9E#$53#$53#$9B#$86#$54#$9A#$97#$A6#$9A#$9D#$5A#$5A#$92;
> Cp1250 =
> #$E1#$E2#$E3#$B9#$E4#$E6#$E7#$E8#$EF#$F0#$EB#$E9#$EC#$EA#$ED#$EE+
> #$E5#$BE#$B3#$F1#$F2#$F6#$F3#$F5#$F4#$E0#$F8#$9C#$BA#$9A#$9D#$FE+
> #$FC#$FA#$F9#$FB#$FD#$BF#$9F#$9E#$C1#$C2#$C3#$A5#$C4#$C6#$C7#$C8+
> #$CF#$D0#$CB#$C9#$CC#$CA#$CD#$CE#$C5#$BC#$A3#$D1#$D2#$D6#$D3#$D5+
> #$D4#$C0#$D8#$8C#$AA#$8A#$8D#$DE#$DC#$DA#$D9#$DB#$DD#$AF#$8F#$8E;
> begin
> for i := 1 to Length ( S ) do
> begin
> Ch := S[i];
> if Ch > #127 then
> begin
> p := PosChar ( Ch, Cp852 );
> if p > 0 then
> begin
> S[i] := Cp1250[p];
> end;
> end;
> end;
> Result := S;
> end;